package com.hspedu.inputStream;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * @Author Stringzhua
 * @Date 2024/3/16 13:40
 * description:演示FileInputStream的使用
 * (字节输入流 文件-->程序)
 */
public class FileInputStream_ {
    public static void main(String[] args) {

    }

    /*
     * 演示读取文件流
     * 单个字节读取,效率比较低
     * 优化:--->使用read(byte[] b)读取
     * */
    @Test
    public void readFile01() {
        String filePath = "e:\\qiyeke\\filecontroller\\hello.txt";
        int readData = 0;
        FileInputStream fileInputStream = null;
        try {
            //创建FileInputStream对象,用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从该输入流读取一个字符的对象,如果没有输入可用,此方法将阻止
            //如何返回-1,表示读取完毕
            while ((readData = fileInputStream.read()) != -1) {
                System.out.println((char) readData);//转成char展示
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //要关闭文件流,释放资源
            try {
                fileInputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    /*
     * 使用read(byte[] b)读取
     * 提高效率
     * */
    @Test
    public void readFile02() {
        String filePath = "e:\\hello.txt";
        //字节数组
        byte[] buf = new byte[8];//一次读取八个字节
        int readLen = 0;
        FileInputStream fileInputStream = null;
        try {
            //创建FileInputStream对象,用于读取文件
            fileInputStream = new FileInputStream(filePath);
            //从该输入流读取最多byte.lenth字节的数据到字符数组,此方法将阻塞,直到某些输入可用
            //如何返回-1,表示读取完毕
            //如果读取正常,返回实际读取的字节数
            while ((readLen = fileInputStream.read(buf)) != -1) {
                System.out.println(new String(buf, 0, readLen));//转成字符展示
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //要关闭文件流,释放资源
            try {
                fileInputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}
